#include "ActionManager.h"

ActionManager& ActionManager::get()
{
    static ActionManager instance;

    return instance;
}

void ActionManager::init()
{
    fileNewAction = new FileNewAction();
    fileOpenAction = new FileOpenAction();
    fileSaveAction = new FileSaveAction();
    fileSaveAsAction = new FileSaveAsAction();
    fileExitAction = new FileExitAction();
    fileExportCsvAction = new FileExportCsvAction();
    fileExportPdfAction = new FileExportPdfAction();
    filePreviewAction = new FilePreviewAction();
    filePrintAction = new FilePrintAction();
    fileLoadSettingsAction = new FileLoadSettingsAction();
    helpAboutAction = new HelpAboutAction();
    appSettingsAction = new AppSettingsAction();

    // point cloud actions
    pclAddLineAction = new PclAddLineAction();
    pclDefaultAction = new PclDefaultAction();

    // feature actions
    pclFeatureNeUsingIntegralImagesAction = new NeUsingIntegralImagesAction();
    pclFeatureFastPointFeatureHistogramAction = new FastPointFeatureHistogramAction();
    pclFeaturePointFeatureHistogramsAction = new PointFeatureHistogramsAction();
    pclFeatureEstimatingSurfaceNormalsAction = new EstimatingSurfaceNormalsAction();
    pclSurfacesAction = new PclFastGreedyProjectionTriangulationAction();
    pclFeatureNARFAction = new NARFAction();
    pclFeatureViewpointFeatureHistogramAction = new ViewpointFeatureHistogramAction();
    pclFeatureMomentOfInertiaEstimationAction = new MomentOfInertiaEstimationAction();
    pclFeatureRotationalProjectionStatisticsAction = new RotationalProjectionStatisticsAction();
    pclFeatureGloballyAlignedSpatialDistributionAction = new GloballyAlignedSpatialDistributionAction();

    // filter actions
    pclFilterExtractingIndicesAction = new ExtractingIndicesAction();
    pclFilterPassThroughAction = new PassThroughAction();
    pclFilterProjectInliersAction = new ProjectInliersAction();
    pclFilterRadiusOutlierAction = new RadiusOutlierAction();
    pclFilterStatisticalOutlierRemovalAction = new StatisticalOutlierRemovalAction();
    pclFilterVoxelGridAction = new VoxelGridAction();

    // Keypoint
    pclKeypointNarfKeypointAction = new NarfKeypointAction();

    // KDTree
    pclKdTreeKdTreeAction = new KdTreeAction();

    // Octree
    pclOctreeOctreeChangeAction = new OctreeChangeAction();
    pclOctreeOctreeSearchAction = new OctreeSearchAction();
    pclOctreePointCloudCompressionAction = new PointCloudCompressionAction();

    // Range Image
    pclRangeImageExtractBorderAction = new ExtractBorderAction();
    pclRangeImageAction = new RangeImageAction();

    // Recognition
    pclRecognitionCorrespondenceGroupingAction = new CorrespondenceGroupingAction();
    pclRecognitionHypothesisVerificationAction = new HypothesisVerificationAction();
    pclRecognitionImplicitShapeAction = new ImplicitShapeAction();

    // Registration
    pclRegistrationIterativeClosestPointAction = new IterativeClosestPointAction();
    pclRegistrationInteractiveIterativeClosestPointAction = new InteractiveIterativeClosestPointAction();
    pclRegistrationNormalDistributionsTransformAction = new NormalDistributionsTransformAction();
    pclRegistrationPoseEstimationAction = new PoseEstimationAction();
    pclRegistrationRegisterPairsOfCloudsAction = new RegisterPairsOfCloudsAction();

    // Sample Consensus
    pclSampleConsensusRandomSampleConsensusAction = new RandomSampleConsensusAction();

    // Segmentation
    pclSegmentationConditionalEuclideanClusteringAction = new ConditionalEuclideanClusteringAction();
    pclSegmentationCylinderSegmentationAction = new CylinderSegmentationAction();
    pclSegmentationDifferenceOfNormalsEstimationAction = new DifferenceOfNormalsEstimationAction();
    pclSegmentationEuclideanClusterExtractionAction = new EuclideanClusterExtractionAction();
    pclSegmentationMinCutBasedSegmentationAction = new MinCutBasedSegmentationAction();
    pclSegmentationModelOutlierRemovalAction = new ModelOutlierRemovalAction();
    pclSegmentationPclPlaneModelAction = new PclPlaneModelAction();
    pclSegmentationPclRegionGrowingAction = new PclRegionGrowingAction();
    pclSegmentationProgressiveMorphologicalFilterAction = new ProgressiveMorphologicalFilterAction();
    pclSegmentationRegionGrowingSegmentationAction = new RegionGrowingSegmentationAction();
    pclSegmentationSupervoxelClusteringAction = new SupervoxelClusteringAction();

    // Surface
    pclSurfaceBSplineFittingAction = new BSplineFittingAction();
    pclSurfaceHullPolygonAction = new HullPolygonAction();
    pclSurfaceMovingLeastSquaresAction = new MovingLeastSquaresAction();
    pclFastGreedyProjectionTriangulationAction = new PclFastGreedyProjectionTriangulationAction();
}
